| Document status | 35 - Reviewed |
|---|
Entra ID Groups Overview
Purpose
- Define how Entra ID groups are used for EnergyConnect infrastructure RBAC and application access.
- Standardize naming, roles, and access flows.
Provisioning
- All groups are auto-created per environment and customer by the Bicep platform prerequisites deployment.
Naming convention
Pattern
- ec-{env}-{customer}-{scope}-{role}
Notes:
- env: dev | test | qa | staging | prod
- customer: short code (e.g., fm, ne)
- scope: infra | app
- role (by scope):
- infra: reader | contributor | owner | vm-admin
- app: cmpp-reader | cmpp-handler | system-reader | administrator | hangfire
Examples
- Infrastructure: ec-test-fm-infra-contributor, ec-prod-ne-infra-owner, ec-qa-fm-infra-vm-admin
- Application: ec-staging-ne-app-cmpp-reader, ec-test-fm-app-cmpp-handler, ec-prod-ne-app-system-reader, ec-prod-fm-app-administrator, ec-prod-fm-app-hangfire
Infrastructure Entra ID Groups
Description
- Groups assign Azure RBAC at subscription scope.
- Environment separation by design (e.g., Contributor in test, Reader/no access in prod).'
RBAC mapping
- reader → Reader (subscription)
- contributor → Contributor (subscription)
- owner → Owner (subscription)
- vm-admin → Virtual Machine Administrator Login (subscription)
Access flow (PIM)
- All groups except Reader are PIM-enabled.
- Eligible → Activate with justification/MFA → Access granted for the chosen duration (max 8 hours).
- Missing eligibility: contact Managed Services or Kasper Søndergaard.
Access management
- Fellowmind is always responsible for group membership management of the infrastructure groups, regardless of hosting tenant.
Application Entra ID Groups
Description
- Used for Entra ID authentication/authorization to EnergyConnect applications (e.g., API, Hangfire dashboard).
- Users receive app roles through group membership. Without the role, access is denied.
App role mapping (current)
- cpmp-reader: Målepunkt Læser, Tilslutningspunkt Læser
- cpmp-handler: Målepunkt Læser, Målepunkt Redaktør, Tilslutningspunkt Læser, Tilslutningspunkt Redaktør, Afstemning Læser, VEE Læser, Priselementer Læser
- system-reader: Målepunkt Læser, Tilslutningspunkt Læser, Afstemning Læser, VEE Læser, Priselementer Læser
- administrator: Målepunkt Læser, Målepunkt Redaktør, Tilslutningspunkt Læser, Tilslutningspunkt Redaktør, Afstemning Læser, VEE Læser, VEE Redaktør, Priselementer Læser, Priselementer Redaktør
- hangfire: Hangfire
Access management
- Hosted on Fellowmind tenant: Fellowmind adds members based on customer’s user list.
- Hosted on customer tenant: customer admins manage membership.
cpmp-reader
graph TD cpmpreader["ec-{env}-{customer}- app-cpmp-reader"] cpmpreader -->|app role| cr1["Målepunkt Læser"] cpmpreader -->|app role| cr2["Tilslutningspunkt Læser"]
cpmp-handler
graph TD cpmphandler["ec-{env}-{customer}- app-cpmp-handler"] cpmphandler -->|app role| ch1["Målepunkt Læser"] cpmphandler -->|app role| ch2["Målepunkt Redaktør"] cpmphandler -->|app role| ch3["Tilslutningspunkt Læser"] cpmphandler -->|app role| ch4["Tilslutningspunkt Redaktør"] cpmphandler -->|app role| ch5["Afstemning Læser"] cpmphandler -->|app role| ch6["VEE Læser"] cpmphandler -->|app role| ch7["Priselementer Læser"]
system-reader
graph TD systemreader["ec-{env}-{customer}- app-system-reader"] systemreader -->|app role| sr1["Målepunkt Læser"] systemreader -->|app role| sr2["Tilslutningspunkt Læser"] systemreader -->|app role| sr3["Afstemning Læser"] systemreader -->|app role| sr4["VEE Læser"] systemreader -->|app role| sr5["Priselementer Læser"]
administrator
graph TD administrator["ec-{env}-{customer}- app-administrator"] administrator -->|app role| ad1["Målepunkt Læser"] administrator -->|app role| ad2["Målepunkt Redaktør"] administrator -->|app role| ad3["Tilslutningspunkt Læser"] administrator -->|app role| ad4["Tilslutningspunkt Redaktør"] administrator -->|app role| ad5["Afstemning Læser"] administrator -->|app role| ad6["VEE Læser"] administrator -->|app role| ad7["VEE Redaktør"] administrator -->|app role| ad8["Priselementer Læser"] administrator -->|app role| ad9["Priselementer Redaktør"]
hangfire
graph TD hangfire["ec-{env}-{customer}- app-hangfire"] hangfire -->|app role| hf1["Hangfire"]